using System;
using UnityEngine.Serialization;

namespace DA.AnimGraph {

    public class EventParameterAttribute : Attribute {

    }

    // 注意！"byte"这个大小不能随便改，会影响序列化
    public enum TimelineEventState : byte {
        HoldStart = 1, // 持续性事件的开始
        HoldEnd = 2, // 持续性事件的结束
        Trigger = 3, // 单次触发事件
        Always = 4, // 每帧都触发的事件
    }

    // 注意！"uint"这个大小不能随便改，会影响序列化
    [Flags]
    public enum TimelineEventFlag : uint {
        None = 0,
        TriggerBeforeExit = 0b1, // 确保触发
    }


    public abstract class TimelineEventParameter {
        public abstract TimelineEventState state { get; }
        public abstract AUID typeUuid { get; }
        /// <returns>(size, typeHash, eventData)</returns>
        // public abstract (int, ulong, object) Publish();
        public abstract void Write(BinaryDataBufferWriter writer);
    }

    /*
     * 定义 TimelineEvent
     * 1、继承 ITimelineEventParameter
     * 2、定义参数，基础类型和string需要使用 RefField<> 确保可修改
     * 3、添加 [EventParameter] 以在编辑器中显示
     * 4、实现 Publish(),将在运行时转换为运行时类型
     */

    //public class EventExample : ITimelineEventParameter {
    //    [EventParameter] public RefField<int> fp = new();
    //    public (int, ulong, object) Publish() {
    //        return (0, 0, null);
    //    }
    //}

}
